{
  "openapi": "3.0.0",
  "info": {
    "title": "WeatherApp API",
    "description": "Приложение для просмотра погоды, разработанное специально для It-Планета",
    "version": "1.0.0"
  },
  "tags": [
    {
      "name": "account"
    },
    {
      "name": "region"
    },
    {
      "name": "regionType"
    },
    {
      "name": "weather"
    }
  ],
  "paths": {
    "/registration": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Создание пользователя",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  }
                },
                "required": [
                  "firstName",
                  "lastName",
                  "email",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "firstName": {
                      "type": "string"
                    },
                    "lastName": {
                      "type": "string"
                    },
                    "email": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "firstName = null, firstName = \"\" или состоит из пробелов, lastName = null, lastName = \"\" или состоит из пробелов, email = null, email = \"\" или состоит из пробелов, email аккаунта не валидный, password = null, password = \"\" или состоит из пробелов"
          },
          "403": {
            "description": "Запрос от авторизованного аккаунта"
          },
          "409": {
            "description": "Аккаунт с таким email уже существует"
          }
        }
      }
    },
    "/login": {
      "post": {
        "tags": [
          "account"
        ],
        "summary": "Аутентификация пользователя",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  }
                },
                "required": [
                  "email",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен или запрос от авторизованного аккаунта",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Email или пароль не верны"
          }
        }
      }
    },
    "/accounts/{accountId}": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Получение аккаунта",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "firstName": {
                      "type": "string"
                    },
                    "lastName": {
                      "type": "string"
                    },
                    "email": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "accountId = null, accountId <= 0"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Аккаунт с таким accountId не найден"
          }
        }
      },
      "put": {
        "tags": [
          "account"
        ],
        "summary": "Изменение аккаунта",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "firstName": {
                    "type": "string"
                  },
                  "lastName": {
                    "type": "string"
                  },
                  "email": {
                    "type": "string"
                  },
                  "password": {
                    "type": "string"
                  }
                },
                "required": [
                  "firstName",
                  "lastName",
                  "email",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "firstName": {
                      "type": "string"
                    },
                    "lastName": {
                      "type": "string"
                    },
                    "email": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "accountId = null, accountId <= 0, firstName = null, firstName = \"\" или состоит из пробелов, lastName = null, lastName = \"\" или состоит из пробелов, email = null, email = \"\" или состоит из пробелов, email аккаунта не валидный, password = null, password = \"\" или состоит из пробелов"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "403": {
            "description": "Обновление не своего аккаунта. Аккаунт не найден"
          },
          "409": {
            "description": "Аккаунт с таким email уже существует"
          }
        }
      },
      "delete": {
        "tags": [
          "account"
        ],
        "summary": "Удаление аккаунта",
        "parameters": [
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен"
          },
          "400": {
            "description": "accountId = null, accountId <= 0,"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "403": {
            "description": "Обновление не своего аккаунта. Аккаунт не найден"
          }
        }
      }
    },
    "/accounts/search": {
      "get": {
        "tags": [
          "account"
        ],
        "summary": "Поиск аккаунтов",
        "parameters": [
          {
            "name": "firstName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "lastName",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "email",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "form",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "size",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "integer",
                        "format": "int64"
                      },
                      "firstName": {
                        "type": "string"
                      },
                      "lastName": {
                        "type": "string"
                      },
                      "email": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "form < 0, size <= 0"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Аккаунт с такими параметрами не найден"
          }
        }
      }
    },
    "/region/{regionId}": {
      "get": {
        "tags": [
          "region"
        ],
        "summary": "Получение информации о регионе",
        "parameters": [
          {
            "name": "regionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "regionType": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "accountId": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "name": {
                      "type": "string"
                    },
                    "parentRegion": {
                      "type": "string"
                    },
                    "latitude": {
                      "type": "number",
                      "format": "double"
                    },
                    "longitude": {
                      "type": "number",
                      "format": "double"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "regionld = null, regionld <= 0"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Регион с таким regionld не найден"
          }
        }
      },
      "put": {
        "tags": [
          "region"
        ],
        "summary": "Изменение региона",
        "parameters": [
          {
            "name": "regionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "parentRegion": {
                    "type": "string"
                  },
                  "regionType": {
                    "type": "integer"
                  },
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "firstName",
                  "lastName",
                  "email",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "name": {
                      "type": "string"
                    },
                    "parentRegion": {
                      "type": "string"
                    },
                    "latitude": {
                      "type": "number",
                      "format": "double"
                    },
                    "longitude": {
                      "type": "number",
                      "format": "double"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "regionld = null, name = null, latitude = null, longitude = null"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "404": {
            "description": "Регион с таким regionId не найден"
          },
          "409": {
            "description": "Регион с такими latitude и longitude уже существует"
          }
        }
      },
      "delete": {
        "tags": [
          "region"
        ],
        "summary": "Удаление региона",
        "parameters": [
          {
            "name": "regionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен"
          },
          "400": {
            "description": "regionld = null, regionld <= 0. Регион является родительским для другого региона"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "404": {
            "description": "Регион с таким regionId не найден"
          }
        }
      }
    },
    "/region": {
      "post": {
        "tags": [
          "region"
        ],
        "summary": "Добавление региона",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  },
                  "parentRegion": {
                    "type": "string"
                  },
                  "regionType": {
                    "type": "integer"
                  },
                  "latitude": {
                    "type": "number"
                  },
                  "longitude": {
                    "type": "number"
                  }
                },
                "required": [
                  "firstName",
                  "lastName",
                  "email",
                  "password"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "name": {
                      "type": "string"
                    },
                    "parentRegion": {
                      "type": "string"
                    },
                    "regionType": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "latitude": {
                      "type": "number",
                      "format": "double"
                    },
                    "longitude": {
                      "type": "number",
                      "format": "double"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "latitude = null, name = null, longitude = null"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "409": {
            "description": "Регион с такими latitude и longitude уже существует"
          }
        }
      }
    },
    "/region/types/{typeId}": {
      "get": {
        "tags": [
          "regionType"
        ],
        "summary": "Получение информации о типе региона",
        "parameters": [
          {
            "name": "typeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "type": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "typeId = null, typeId <= 0"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Тип региона с таким typeId не найден"
          }
        }
      },
      "put": {
        "tags": [
          "regionType"
        ],
        "summary": "Изменение тип региона",
        "parameters": [
          {
            "name": "typeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string"
                  }
                },
                "required": [
                  "type"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "type": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "typeId <= 0, typeId = null, type = null, type = \"\" или состоит из пробелов"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "404": {
            "description": "Тип региона с таким typeId не найден"
          },
          "409": {
            "description": "Тип региона с таким type уже существует"
          }
        }
      },
      "delete": {
        "tags": [
          "regionType"
        ],
        "summary": "Удаление типа региона",
        "parameters": [
          {
            "name": "typeId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен"
          },
          "400": {
            "description": "typeId = null, typeId <= 0. Есть регионы с типом с typeId"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "404": {
            "description": "Тип региона с таким typeId не найден"
          }
        }
      }
    },
    "/region/types": {
      "post": {
        "tags": [
          "regionType"
        ],
        "summary": "Добавление региона",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string"
                  }
                },
                "required": [
                  "type"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64"
                    },
                    "type": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "type = null, type = \"\" или состоит из пробелов"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "409": {
            "description": "Тип региона с таким type уже существует"
          }
        }
      }
    },
    "/region/weather/{regionId}": {
      "get": {
        "tags": [
          "weather"
        ],
        "summary": "Получение информации о погоде в регионе",
        "parameters": [
          {
            "name": "regionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Успешный запрос",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "regionName": {
                      "type": "string"
                    },
                    "temperature": {
                      "type": "number"
                    },
                    "humidity": {
                      "type": "number"
                    },
                    "windSpeed": {
                      "type": "number"
                    },
                    "weatherCondition": {
                      "type": "string",
                      "enum": [
                        "CLEAR",
                        "CLOUDY",
                        "RAIN",
                        "SNOW",
                        "FOG",
                        "STORM"
                      ]
                    },
                    "precipitationAmount": {
                      "type": "number"
                    },
                    "measurementDateTime": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "weatherForecast": {
                      "type": "array",
                      "items": {
                        "type": "integer"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Данные не в том формате"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Регион с regionld не найден или forecastld в данном регионе не найден"
          }
        }
      },
      "put": {
        "tags": [
          "weather"
        ],
        "summary": "Изменение погоды в регион",
        "parameters": [
          {
            "name": "regionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "regionId": {
                      "type": "integer"
                    },
                    "regionName": {
                      "type": "string"
                    },
                    "temperature": {
                      "type": "number"
                    },
                    "humidity": {
                      "type": "number"
                    },
                    "windSpeed": {
                      "type": "number"
                    },
                    "weatherCondition": {
                      "type": "string",
                      "enum": [
                        "CLEAR",
                        "CLOUDY",
                        "RAIN",
                        "SNOW",
                        "FOG",
                        "STORM"
                      ]
                    },
                    "precipitationAmount": {
                      "type": "number"
                    },
                    "measurementDateTime": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "weatherForecast": {
                      "type": "array",
                      "items": {
                        "type": "integer"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Данные не в том формате"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "409": {
            "description": "Тип региона с таким type уже существует"
          }
        }
      },
      "delete": {
        "tags": [
          "weather"
        ],
        "summary": "Удаление погоды в регионе",
        "parameters": [
          {
            "name": "regionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен"
          },
          "400": {
            "description": "regionld = null, regionld <= 0"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Регион с regionId не найден"
          }
        }
      }
    },
    "/region/weather": {
      "post": {
        "tags": [
          "weather"
        ],
        "summary": "Добавление погоды",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "regionId": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Идентификатор региона"
                  },
                  "regionName": {
                    "type": "string",
                    "description": "Название региона"
                  },
                  "temperature": {
                    "type": "number",
                    "format": "float",
                    "description": "Прогнозируемая температура, °C"
                  },
                  "humidity": {
                    "type": "number",
                    "format": "float",
                    "description": "Влажность, %"
                  },
                  "windSpeed": {
                    "type": "number",
                    "format": "float",
                    "description": "Скорость ветра, м/с"
                  },
                  "weatherCondition": {
                    "type": "string",
                    "description": "Прогнозируемое состояние погоды",
                    "enum": [
                      "CLEAR",
                      "CLOUDY",
                      "RAIN",
                      "SNOW",
                      "FOG",
                      "STORM"
                    ]
                  },
                  "precipitationAmount": {
                    "type": "number",
                    "format": "float",
                    "description": "Количество осадков, мм"
                  },
                  "measurementDateTime": {
                    "type": "string",
                    "format": "date-time",
                    "description": "Дата и время измерения в формате ISO-8601"
                  },
                  "weatherForecast": {
                    "type": "string",
                    "description": "Прогноз погоды"
                  }
                },
                "required": [
                  "regionId",
                  "regionName",
                  "temperature",
                  "humidity",
                  "windSpeed",
                  "weatherCondition",
                  "precipitationAmount",
                  "measurementDateTime",
                  "weatherForecast"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64",
                      "description": "Идентификатор записи"
                    },
                    "regionId": {
                      "type": "integer",
                      "format": "int64",
                      "description": "Идентификатор региона"
                    },
                    "regionName": {
                      "type": "string",
                      "description": "Название региона"
                    },
                    "temperature": {
                      "type": "number",
                      "format": "float",
                      "description": "Прогнозируемая температура, °C"
                    },
                    "humidity": {
                      "type": "number",
                      "format": "float",
                      "description": "Влажность, %"
                    },
                    "windSpeed": {
                      "type": "number",
                      "format": "float",
                      "description": "Скорость ветра, м/с"
                    },
                    "weatherCondition": {
                      "type": "string",
                      "description": "Прогнозируемое состояние погоды"
                    },
                    "precipitationAmount": {
                      "type": "number",
                      "format": "float",
                      "description": "Количество осадков, мм"
                    },
                    "measurementDateTime": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Дата и время измерения в формате ISO-8601"
                    },
                    "weatherForecast": {
                      "type": "string",
                      "description": "Прогноз погоды"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Данные не в том формате"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          }
        }
      }
    },
    "/region/weather/forecast/{forecastId}": {
      "get": {
        "tags": [
          "forecast"
        ],
        "summary": "Получение информации о прогнозе погоды",
        "parameters": [
          {
            "name": "forecastId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Успешный запрос",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "datetime": {
                      "type": "string"
                    },
                    "temperature": {
                      "type": "number"
                    },
                    "weatherCondition": {
                      "type": "string",
                      "enum": [
                        "CLEAR",
                        "CLOUDY",
                        "RAIN",
                        "SNOW",
                        "FOG",
                        "STORM"
                      ]
                    },
                    "regionId": {
                      "type": "number",
                      "format": "int64"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Данные не в том формате"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Прогноза с таким forecastld не существует"
          }
        }
      },
      "put": {
        "tags": [
          "forecast"
        ],
        "summary": "Изменение прогноза погоды",
        "parameters": [
          {
            "name": "forecastId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer"
                    },
                    "dateTime": {
                      "type": "string"
                    },
                    "temperature": {
                      "type": "number"
                    },
                    "regionId": {
                      "type": "number"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Данные не в том формате"
          },
          "401": {
            "description": "Запрос от неавторизованного аккаунта. Неверные авторизационные данные"
          },
          "409": {
            "description": "Прогноза с таким forecastld не существует"
          }
        }
      },
      "delete": {
        "tags": [
          "forecast"
        ],
        "summary": "Удаление прогноза погоды",
        "parameters": [
          {
            "name": "forecastId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен"
          },
          "400": {
            "description": "forecastld = null, forecastld <= 0,"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Прогноза погоды с таким forecastld не найдена"
          }
        }
      }
    },
    "/region/weather/forecast": {
      "post": {
        "tags": [
          "forecast"
        ],
        "summary": "Добавление прогноза погоды",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "regionId": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Идентификатор региона"
                  },
                  "dateTime": {
                    "type": "string",
                    "description": "Дата и время, на которые делается прогноз"
                  },
                  "temperature": {
                    "type": "number",
                    "format": "float",
                    "description": "Прогнозируемая температура, °C"
                  },
                  "weatherCondition": {
                    "type": "string",
                    "description": "Прогнозируемое состояние погоды",
                    "enum": [
                      "CLEAR",
                      "CLOUDY",
                      "RAIN",
                      "SNOW",
                      "FOG",
                      "STORM"
                    ]
                  }
                },
                "required": [
                  "regionId",
                  "regionName",
                  "temperature",
                  "humidity",
                  "windSpeed",
                  "weatherCondition",
                  "precipitationAmount",
                  "measurementDateTime",
                  "weatherForecast"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Запрос успешно выполнен",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "integer",
                      "format": "int64",
                      "description": "Идентификатор записи"
                    },
                    "regionId": {
                      "type": "integer",
                      "format": "int64",
                      "description": "Идентификатор региона"
                    },
                    "regionName": {
                      "type": "string",
                      "description": "Название региона"
                    },
                    "temperature": {
                      "type": "number",
                      "format": "float",
                      "description": "Прогнозируемая температура, °C"
                    },
                    "humidity": {
                      "type": "number",
                      "format": "float",
                      "description": "Влажность, %"
                    },
                    "windSpeed": {
                      "type": "number",
                      "format": "float",
                      "description": "Скорость ветра, м/с"
                    },
                    "weatherCondition": {
                      "type": "string",
                      "description": "Прогнозируемое состояние погоды"
                    },
                    "precipitationAmount": {
                      "type": "number",
                      "format": "float",
                      "description": "Количество осадков, мм"
                    },
                    "measurementDateTime": {
                      "type": "string",
                      "format": "date-time",
                      "description": "Дата и время измерения в формате ISO-8601"
                    },
                    "weatherForecast": {
                      "type": "string",
                      "description": "Прогноз погоды"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Данные не в том формате"
          },
          "401": {
            "description": "Неверные авторизационные данные"
          },
          "404": {
            "description": "Прогноза погоды с таким forecastld не найдена"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Account": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор аккаунта пользователя"
          },
          "firstName": {
            "type": "string",
            "description": "Имя пользователя"
          },
          "lastName": {
            "type": "string",
            "description": "Фамилия пользователя"
          },
          "email": {
            "type": "string",
            "description": "Адрес электронной почты"
          },
          "password": {
            "type": "string",
            "description": "Пароль от аккаунта пользователя"
          }
        }
      },
      "Region": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор региона"
          },
          "regionType": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор типа региона"
          },
          "accountId": {
            "type": "integer",
            "format": "int64",
            "description": "Аккаунт внесший данные о регионе"
          },
          "parentRegion": {
            "type": "string",
            "description": "Название родительского региона"
          },
          "name": {
            "type": "string",
            "description": "Название региона"
          },
          "latitude": {
            "type": "number",
            "format": "double",
            "description": "Координаты широты"
          },
          "longitude": {
            "type": "number",
            "format": "double",
            "description": "Координаты долготы"
          }
        }
      },
      "RegionType": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор типа региона"
          },
          "type": {
            "type": "string",
            "description": "Тип региона"
          }
        }
      },
      "RegionWeather": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор погоды в регионе"
          },
          "regionId": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор региона"
          },
          "regionName": {
            "type": "string",
            "format": "int64",
            "description": "Название региона"
          },
          "temperature": {
            "type": "number",
            "format": "float",
            "description": "Температура в регионе"
          },
          "humidity": {
            "type": "number",
            "format": "float",
            "description": "Влажность воздуха в регионе, %"
          },
          "windSpeed": {
            "type": "number",
            "format": "float",
            "description": "Скорость ветра"
          },
          "weatherCondition": {
            "type": "string",
            "description": "Текущее состояние погоды",
            "enum": [
              "CLEAR",
              "CLOUDY",
              "RAIN",
              "SNOW",
              "FOG",
              "STORM"
            ]
          },
          "precipitationAmount": {
            "type": "number",
            "format": "float",
            "description": "Количество осадков, мм"
          },
          "measurementDateTime": {
            "type": "number",
            "format": "timestamp",
            "description": "Дата и время измерения погодных условий"
          },
          "weatherForecast": {
            "type": "string",
            "description": "Массив идентификаторов объектов с прогнозом погоды на ближайшие дни"
          }
        }
      },
      "WeatherForecast": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор прогноза"
          },
          "regionId": {
            "type": "integer",
            "format": "int64",
            "description": "Идентификатор региона, для которого делается прогноз"
          },
          "dateTime": {
            "type": "number",
            "format": "date-time",
            "description": "Дата и время, на которые делается прогноз в формате ISO-8601"
          },
          "temperature": {
            "type": "number",
            "format": "float",
            "description": "Прогнозируемая температура, °C"
          },
          "weatherCondition": {
            "type": "string",
            "description": "Прогнозируемое состояние погоды",
            "enum": [
              "CLEAR",
              "CLOUDY",
              "RAIN",
              "SNOW",
              "FOG",
              "STORM"
            ]
          }
        }
      }
    }
  }
}